﻿#ifndef FLOATINGACTIVATOR_H
#define FLOATINGACTIVATOR_H

#include <QWidget>
#include <QDateTime>

// 悬浮球，拖动屏幕边缘自动停靠
class FloatingActivator : public QWidget
{
    Q_OBJECT

signals:
    // 点击发出的信号
    void clicked();

public:
    explicit FloatingActivator(QWidget *parent = nullptr);
    ~FloatingActivator();

protected:
    /*
    * 重载事件
    */
    // 重绘事件
    void paintEvent(QPaintEvent* e) override;
    // 鼠标点击事件
    void mousePressEvent(QMouseEvent* e) override;
    // 鼠标移动事件
    void mouseMoveEvent(QMouseEvent* e) override;
    // 鼠标弹起事件
    void mouseReleaseEvent(QMouseEvent*) override;
    // 鼠标移动进入事件
    void enterEvent(QEvent*) override;
    // 鼠标离开事件
    void leaveEvent(QEvent*) override;

private:
    // 停靠窗口
    void dockWidget();
    // 弹出窗口
    void popupWidget();

private:
    // 停靠方向，内部使用
    enum Direction
    {
        // 向上停靠
        Up = 0,
        // 向左停靠
        Left,
        // 向右停靠
        Right
    };

    // 背景图
    QPixmap* m_pixmap = nullptr;
    // 鼠标点击坐标
    QPoint m_lastPoint;

    // 屏幕宽度
    int m_screenWidth = 0;
    // 停靠方向
    Direction m_direction;
    // 是否已停靠
    bool m_isDocked = false;
    // 鼠标左键按下的时间，用于判断是否用户单击
    QDateTime m_pressedTime;
};

#endif // FLOATINGACTIVATOR_H
